/**
 * 双向链表
 * 
 * */

#include <stdio.h>
#include <stdlib.h>

#define ElemType int

typedef struct DNode{
	ElemType data;			//数据域
	struct DNode* prior;	//前驱指针域
	struct DNode* next;		//后继指针域
}DNode, *DLinkList;


//双链表初始化
DLinkList DList_Init(DLinkList& L);

//双链表插入
DLinkList DLinkList_Insert(DLinkList& L, int i, ElemType e);

//双链表删除
DLinkList DList_Delete(DLinkList& L, ElemType data);

//更新结点的元素
DLinkList DLinkList_Update(DLinkList& L, int i, ElemType e);

int main()
{


}

DLinkList DList_Init(DLinkList& L)
{
	L=(DLNode* )malloc(sizeof(DLNode));
	L->data = -1;
	L->prior = NULL;
	L->next = NULL
	return L;
}

DLinkList DLinkList_Insert(DLinkList& L, int i, ElemType e)
{
	LNode* p = L->next;	//p为遍历指针
	LNode* s = (LNode* )malloc(sizeof(LNode));
	s->data=e;

	int j=1;
	while(p && i<j) {
		p = p->next;
	}

	s->next = p->next;
	p->next->prior = s;
	p->next = s;
	s->prior = p; 
 
 	return L;
}

DLinkList DList_Delete(DLinkList& L, ElemType data)
{
	LNode* p=L->next;
	while(p && p->data != data) p=p->next;	//找到待删除的结点

	p->prior->next = p->next;
	p->prior = p->next->prior;
	free(p);
	return L;
}

DLinkList DLinkList_Update(DLinkList& L, int i, ElemType e)
{
	LNode* p = L->next;
	for(int j=0 && p; j < i; j++) p = p->next;
		p->data = e;
	return L;
}

